package collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/**
 * die
 * 迭代器
 * 集合提供了统一的遍历方式:迭代器模式
 *
 * Iterator iterator()
 * 集合提供的iterator方法可以获取用于遍历当前集合的迭代器
 *
 * 迭代器遍历集合集合遵循的步骤:
 * 问->取->删
 */
public class IteratorDemo {
    public static void main(String[] args) {
        /*
            Collection<E>  集合支持泛型，用于使用时约束集合的元素类型
         */
        Collection<String> c = new ArrayList<>();
        c.add("one");//add(E e)此时E看做String类型
        c.add("#");
        c.add("two");
        c.add("#");
        c.add("three");
        c.add("#");
        c.add("four");
        c.add("#");
        c.add("five");
//        c.add(123);//编译器会检查实参是否符合泛型要求，不符合时编译不通过

        //迭代器也支持泛型，指定时与它遍历的集合指定的泛型类型一致即可
        Iterator<String> it = c.iterator();
        while(it.hasNext()){//boolean hasNext() 通过迭代器判断是否还有下一个元素
            String e = it.next();//获取下一个元素
            if("#".equals(e)){//好的书写习惯:字面量.equals(变量)，避免空指针异常
                //迭代器要求遍历过程中不可以通过集合方法【增,删】元素，否则会抛出异常
//                c.remove(e);
                //remove时不需要指定参数，删除的是本次next获取的元素
                it.remove();
            }
            System.out.println(e);
        }

        System.out.println(c);


    }
}




